package simplezap

import (
	"fmt"
	"io"
)

// Logger 是我们手工打造的第一版迷你 zap。
// 它只负责把日志的级别和消息写到某个 io.Writer，比如 bytes.Buffer 或 os.Stdout。
type Logger struct {
	writer io.Writer
}

// New 会创建一个 Logger 实例。
// 参数 w：任何实现了 io.Writer 接口的对象，都可以成为日志的“纸张”。
// 返回值：带着这张纸张的 Logger 指针。
func New(w io.Writer) *Logger {
	return &Logger{writer: w}
}

// Info 会以“[INFO] message”的形式写入日志。
// 如果在写入时出现问题，会把错误返回给调用者。
func (l *Logger) Info(message string) error {
	return l.write("INFO", message)
}

// write 是一个小助手，负责统一的格式化输出。
func (l *Logger) write(level, message string) error {
	if l == nil {
		return fmt.Errorf("logger is nil")
	}
	if l.writer == nil {
		return fmt.Errorf("writer is nil")
	}

	if _, err := fmt.Fprintf(l.writer, "[%s] %s\n", level, message); err != nil {
		return fmt.Errorf("write log: %w", err)
	}
	return nil
}
